#include "cp.h"


cp::cp()
{
    forcaResultante.setXY(0.0,0.0);

    objeto[0] = 0.0;
    objeto[1] = 0.0;
    nroAtrativas = 0;
    nroRepulsivas = 0;
    cteAtrativa = 1.0;
    cteRepulsiva = 50.0;
    cteRepulsivaFixa = 0.0;
}

void cp::reset(){
    forcaResultante.setXY(0.0,0.0);
    objeto[0] = 0.0;
    objeto[1] = 0.0;
    nroAtrativas = 0;
    nroRepulsivas = 0;
    cteAtrativa = 1.0;
    cteRepulsiva = 50.0;
    cteRepulsivaFixa = 0.0;
}

void cp::addAtrativa(double px, double py){
    nroAtrativas++;
    Vetor<double> temp;
    double y_adj = py;
    double x_adj = px;

   // if (px < -68.0) x_adj = -68.0;

    temp.setXY_CP(x_adj - objeto[0], y_adj - objeto[1], getCteAtrativa(), 0);
    forcaResultante += temp;
}

void cp::addRepulsiva(double px, double py){
    nroRepulsivas++;
    Vetor<double> temp;
    temp.setXY_CP(-px + objeto[0], -py + objeto[1], getCteRepulsiva(), 1);
    forcaResultante += temp;
}

void cp::addRepulsivaFixa(double px, double py){
    nroRepulsivas++;
    Vetor<double> temp;
    temp.setXY_CP(-px + objeto[0], -py + objeto[1], getCteRepulsivaFixa(), 1);
    forcaResultante += temp;
}

double cp::getResultanteX(){
    return forcaResultante.getX();
}

double cp::getResultanteY(){
    return forcaResultante.getY();
}

void cp::setCteAtrativa(double d){
    cteAtrativa = d;
}

void cp::setCteRepulsiva(double d){
    cteRepulsiva = d;
}

void cp::setCteRepulsivaFixa(double d){
    cteRepulsiva = d;
}



double cp::getCteAtrativa(){
    return cteAtrativa;
}

double cp::getCteRepulsiva(){
    return cteRepulsiva;
}

double cp::getCteRepulsivaFixa(){
    return cteRepulsiva;
}

void cp::setObjeto(double px, double py){
    objeto[0] = px;
    objeto[1] = py;
}

Vetor<double> cp::getVetorResultante(){
    return forcaResultante;
}

double cp::getAnguloResultante(){
    return atan2(forcaResultante.getY(), forcaResultante.getX());
}
